import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

/**
 * @ClassName LC13
 * 罗马数字转整数
 * @Author ykx
 * @Date 2024/3/3 21:27
 * @Version 1.0
 */
public class LC13 {
    public int romanToInt(String s) {
        // 两个字母的罗马数字
        Map<String, Integer> specialMap = new HashMap<>();
        int result = 0;

        specialMap.put("IV", 4);
        specialMap.put("IX", 9);
        specialMap.put("XL", 40);
        specialMap.put("XC", 90);
        specialMap.put("CD", 400);
        specialMap.put("CM", 900);

        // 先处理双字母
        Set<String> stringSet = specialMap.keySet();
        Iterator<String> iterator = stringSet.iterator();
        while (iterator.hasNext()) {
            String key = iterator.next();
            if (s.contains(key)) {
                result += specialMap.get(key);
                s = s.replace(key, "");
            }
        }

        // 再处理单字母
        Map<Character, Integer> map = new HashMap<>();
        map.put('I', 1);
        map.put('V', 5);
        map.put('X', 10);
        map.put('L', 50);
        map.put('C', 100);
        map.put('D', 500);
        map.put('M', 1000);

        for (int i = 0; i < s.length(); i++) {
            result += map.get(s.charAt(i));
        }

        return result;
    }
}
